#include <iostream>
#include <thread>
#include <future>
#include <memory>

// 异步加法函数（模拟耗时操作）
int Add(int num1, int num2) {
    std::this_thread::sleep_for(std::chrono::seconds(3));
    return num1 + num2;
}

int main()
{
    // 1. 使用智能指针创建packaged_task对象
    // 封装Add函数，模板参数指定返回类型和参数类型
    auto ptask = std::make_shared<std::packaged_task<int(int,int)>>(Add);
    
    // 2. 获取与packaged_task关联的future对象
    // 用于获取异步任务的返回值
    std::future<int> fu = ptask->get_future();
    
    // 3. 创建线程并执行异步任务
    // 使用lambda捕获智能指针，在线程中调用task
    std::thread thr([ptask](){
        (*ptask)(11, 22);  // 调用封装的Add函数，传入参数11和22
    });
    
    // 4. 阻塞等待异步结果
    int sum = fu.get();
    
    // 5. 输出结果并等待线程结束
    std::cout << sum << std::endl;
    thr.join();
    
    return 0;
}    